package com.leetcode.q8;

/**
 * <p> description: desc</p>
 *
 * @author tanzc
 * @date 2022/3/29
 **/
public class MyAtoi {
    public int myAtoi(String s) {
        int i = 0;
        int sign = 1;
        int result = 0;

        // 去除前导空格
        while (i < s.length() && s.charAt(i) == ' ') {
            i++;
        }
        // 检查正负号
        if (i < s.length()) {
            if (s.charAt(i) == '-') {
                sign = -1;
                i++;
            } else if (s.charAt(i) == '+') {
                i++;
            }
        }
        // 依次读取字符
        while (i < s.length()) {
            // 是数字则算最后结果
            if (Character.isDigit(s.charAt(i))) {
                int num = s.charAt(i) - '0';
                if (result > Integer.MAX_VALUE / 10 || (result == Integer.MAX_VALUE / 10 && num > Integer.MAX_VALUE % 10)){
                    return Integer.MAX_VALUE;
                } else if (result < Integer.MIN_VALUE / 10 || (result == Integer.MIN_VALUE / 10 && -num < Integer.MIN_VALUE % 10)) {
                    return Integer.MIN_VALUE;
                }
                result = result * 10 + num * sign;
            } else {
                // 是非数字字符则停止读入
                break;
            }
            i++;
        }
        return result;
    }
}
